home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_400
/
414_02
/
curspriv.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-29
|
11KB
|
332 lines
/*
* $Header: C:\CURSES\RCS\curspriv.h 2.1 1993/06/18 20:18:46 MH Rel MH $
*
* CURSPRIV.H
*
* Header file for definitions and declarations for the
* PDCurses package. These definitions should not be generally
* accessible to programmers, but are provided if the applications
* programmer decides to make the decision in favor of speed on a
* PC over portability.
*
* Revision History:
* Frotz 1.5Beta 900714 Added many levels of compiler support.
* Added mixed prototypes for all "internal" routines.
* Removed all assembly language. Added EGA/VGA
* support. Converted all #ifdef to #if in all
* modules except CURSES.H and CURSPRIV.H.
* Always include ASSERT.H. Added support for an
* external malloc(), calloc() and free().
* Added support for FAST_VIDEO (direct-memory writes).
* Added various memory model support (for FAST_VIDEO).
* Added much of the December 1988 X/Open Curses
* specification.
* bl 1.3 881005 All modules lint-checked with MSC '-W3' and turbo'C'
* '-w -w-pro' switches.
* bl 1.2 881002 Support (by #ifdef UCMASM) for uppercase-only
* assembly routine names. If UCMASM if defined,
* all assembler names are #defined as upper case.
* Not needed if you do "MASM /MX. Also missing
* declaration of cursesscroll(). Fixes thanks to
* N.D. Pentcheff
* bl 1.1 880306 Add _chadd() for raw output routines.
* bl 1.0 870515 Release.
*
*/
#ifndef __CURSES_INTERNALS__
#define __CURSES_INTERNALS__
/* Always include... */
#include <assert.h>
/*----------------------------------------------------------------------
* MEMORY MODEL SUPPORT:
*
* MODELS
* TINY cs,ds,ss all in 1 segment (not enough memory!)
* SMALL cs:1 segment, ds:1 segment
* MEDIUM cs:many segments ds:1 segment
* COMPACT cs:1 segment, ds:many segments
* LARGE cs:many segments ds:many segments
* HUGE cs:many segments ds:segments > 64K
*/
#ifdef __TINY__
# define SMALL 1
#endif
#ifdef __SMALL__
# define SMALL 1
#endif
#ifdef __MEDIUM__
# define MEDIUM 1
#endif
#ifdef __COMPACT__
# define COMPACT 1
#endif
#ifdef __LARGE__
# define LARGE 1
#endif
#ifdef __HUGE__
# define HUGE 1
#endif
/*----------------------------------------------------------------------
* OPERATING SYSTEM SUPPORT:
*
* DOS The one we all know and love:-}
* OS/2 The new kid on the block.
* FLEXOS A Real-time, protected-mode OS from
* Digital Research, Inc.
* (AKA, the 4680 from IBM...)
*/
/*----------------------------------------*/
#ifdef DOS
# define FAST_VIDEO 1 /* We can write directly to the screen. */
typedef union REGS Regs;
extern Regs regs;
# ifdef GO32
# define _FAR_POINTER(s,o) (0xe0000000 + s*16 + o)
# define _FP_SEGMENT(p) (unsigned short)((((long)fp) >> 4) & 0xffff)
# define _FP_OFFSET(p) ((unsigned short)fp & 0x000f)
# else
# ifdef __TURBOC__
/*# define _FAR_POINTER(s,o) ((unsigned long)s * 16 + (unsigned long)o)*/
# define _FAR_POINTER(s,o) MK_FP(s,o)
# else
# define _FAR_POINTER(s,o) (((long)s << 16) | (long)o)
# endif
# define _FP_SEGMENT(p) (unsigned short)(((long)fp) >> 4)
# define _FP_OFFSET(p) ((unsigned short)fp & 0x000f)
# endif
# ifdef GO32
unsigned char getdosmembyte (int offs); /* see: private\_dosmem.c */
unsigned short getdosmemword (int offs);
void setdosmembyte (int offs, unsigned char b);
void setdosmemword (int offs, unsigned short w);
# else
# if SMALL || MEDIUM || MSC
# define getdosmembyte(offs) (*((unsigned char far *) _FAR_POINTER(0,offs)))
# define getdosmemword(offs) (*((unsigned short far *) _FAR_POINTER(0,offs)))
# define setdosmembyte(offs,x) (*((unsigned char far *) _FAR_POINTER(0,offs)) = (x))
# define setdosmemword(offs,x) (*((unsigned short far *) _FAR_POINTER(0,offs)) = (x))
# else
# define getdosmembyte(offs) (*((unsigned char *) _FAR_POINTER(0,offs)))
# define getdosmemword(offs) (*((unsigned short *) _FAR_POINTER(0,offs)))
# define setdosmembyte(offs,x) (*((unsigned char *) _FAR_POINTER(0,offs)) = (x))
# define setdosmemword(offs,x) (*((unsigned short *) _FAR_POINTER(0,offs)) = (x))
# endif
# endif
#endif
/*----------------------------------------*/
#ifdef FLEXOS
# define FAST_VIDEO 1 /* We can use scopy() */
# define GMODE 0 /* KLUDGE ALERT!
* GMODE == 0 defines character mode structures in FLEXTAB.H.
* GMODE == 1 defines graphics mode structures in FLEXTAB.H.
*/
#include <flextab.h>
extern VIRCON vir;
#endif
/*----------------------------------------------------------------------
* MALLOC DEBUGGING SUPPORT:
*
* Set EMALLOC and EMALLOC_MAGIC in order to use your private
* versions of malloc(), calloc(), and free(). This can help,
* but not solve, your malloc problems when debugging...
*
*/
#ifndef INTERNAL
# define EMALLOC 0 /* Disable External Malloc */
#else
# define EMALLOC 0 /* Enable/Disable External Malloc */
# define EMALLOC_MAGIC 0x0C0C /* Our magic indicator that we should */
/* use our external malloc rather than */
/* the runtime's malloc. */
#endif
/*----------------------------------------------------------------------*/
/* window properties */
#define _SUBWIN 0x01 /* window is a subwindow */
#define _ENDLINE 0x02 /* last winline is last screen line */
#define _FULLWIN 0x04 /* window fills screen */
#define _SCROLLWIN 0x08 /* window lwr rgt is screen lwr rgt */
#define _PAD 0x10 /* X/Open Pad. */
/*----------------------------------------------------------------------*/
/* Miscellaneous */
#define _INBUFSIZ 512 /* size of terminal input buffer */
#define _NO_CHANGE -1 /* flags line edge unchanged */
/* @@@ THESE SHOULD BE INDIVIDUAL FUNCTIONS, NOT MACROS! */
#define _BCHAR 0x03 /* Break char (^C) */
#define _ECHAR 0x08 /* Erase char (^H) */
#define _DWCHAR 0x17 /* Delete Word char (^W) */
#define _DLCHAR 0x15 /* Delete Line char (^U) */
#define _GOCHAR 0x11 /* ^Q character */
#define _PRINTCHAR 0x10 /* ^P character */
#define _STOPCHAR 0x13 /* ^S character */
#define NUNGETCH 20 /* max # chars to ungetch() */
/* Setmode stuff */
struct cttyset
{
bool been_set;
SCREEN saved;
};
extern struct cttyset c_sh_tty; /* tty modes for shell_mode */
extern struct cttyset c_pr_tty; /* tty modes for prog_mode */
extern struct cttyset c_save_tty;
extern struct cttyset c_save_trm;
/* Printscan stuff */
extern char c_printscanbuf[]; /* buffer used during I/O */
/* tracing flag */
extern bool trace_on;
/* Strget stuff */
extern char* c_strbeg;
/* doupdate stuff */
extern WINDOW* twin; /* used by many routines */
/* Monitor (terminal) type information */
#define _NONE 0x00
#define _MDA 0x01
#define _CGA 0x02
#define _EGACOLOR 0x04
#define _EGAMONO 0x